#include <ispis.h>
#include <vrijeme.h>
#include <jezgra/vrijeme.h>
#include <jezgra/pozivi_jezgre.h>

int postavi_alarm_pr (	int id, vrijeme_t koliko, void (*obrada)(void *),
			void *param, int zast)
{
	struct {
		int id;	//id alarma, 0 ako se trazi novi

		vrijeme_t kada; //kad se treba "probuditi"?
				//relativno u odnosu na j_sat-a, ili apsolutno

		void (*obrada)(void *); //funkcija koja se zove po isteku
		void *param; //parametar koji se salje u funkciju

		int zast; //razne zastavice
	} p;

	int jf;
	
	p.id = id;
	p.kada = koliko;
	p.obrada = obrada;
	p.param = param;
	p.zast = zast;

	if (p.zast & STVORINOVI)
		jf = ALARM_DOHVATI;
	else
		jf = ALARM_POSTAVI;

	return j_funkcija(jf, &p);
}

int postavi_alarm (	int id, vrijeme_t koliko, void (*obrada)(void *),
			void *param, bool ponavljaj)
{
	int zast = 0;
	
	if (id == STVORI_NOVI)
		zast |= STVORINOVI;

	if (ponavljaj)
		zast |= PERIODICKI;

	return postavi_alarm_pr(id, koliko, obrada, param, zast);
}

int obrisi_alarm (int id)
{
	return j_funkcija(ALARM_OBRISI, &id);
}

int odgodi (vrijeme_t koliko)
{
	int id;
	
	id = postavi_alarm_pr(	STVORI_NOVI, koliko, NULL, NULL, 
				STVORINOVI | BLOKIRAJDR);
	if (id < 0)
		return id;
	
	return obrisi_alarm(id);
}

int odgodi_do (vrijeme_t koliko)
{
	int id;
	
	id = postavi_alarm_pr(	STVORI_NOVI, koliko, NULL, NULL, 
				ABSVRIJEME | STVORINOVI | BLOKIRAJDR);
	if (id < 0)
		return id;
	
	return obrisi_alarm(id);
}
